#!/bin/bash

# IPU ProtoNet 分类器构建脚本
# 使用 Sigmastar 交叉编译工具链

set -e  # 遇到错误时退出

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

echo -e "${BLUE}🚀 IPU ProtoNet 分类器构建脚本${NC}"
echo "========================================"

# 设置交叉编译工具链
export PATH=$PATH:/opt/mindeo/toolchain/gcc-11.1.0-20210608-sigmastar-glibc-x86_64_arm-linux-gnueabihf/bin

# 检查交叉编译器是否存在
if ! command -v arm-linux-gnueabihf-gcc &> /dev/null; then
    echo -e "${RED}❌ 错误: 交叉编译器 arm-linux-gnueabihf-gcc 未找到${NC}"
    echo -e "${YELLOW}请确保工具链路径正确: /opt/mindeo/toolchain/gcc-11.1.0-20210608-sigmastar-glibc-x86_64_arm-linux-gnueabihf/bin${NC}"
    exit 1
fi

echo -e "${GREEN}✅ 交叉编译器检测成功${NC}"

# 创建构建目录
BUILD_DIR="build"
if [ -d "$BUILD_DIR" ]; then
    echo -e "${YELLOW}⚠️  清理现有构建目录${NC}"
    rm -rf "$BUILD_DIR"
fi

mkdir -p "$BUILD_DIR"
cd "$BUILD_DIR"

echo -e "${BLUE}📦 配置CMake...${NC}"

# 配置CMake
cmake .. \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_SYSTEM_NAME=Linux \
    -DCMAKE_SYSTEM_PROCESSOR=arm \
    -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc \
    -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ \
    -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
    -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
    -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY

if [ $? -ne 0 ]; then
    echo -e "${RED}❌ CMake配置失败${NC}"
    exit 1
fi

echo -e "${BLUE}🔨 开始编译...${NC}"

# 编译
make -j$(nproc)

if [ $? -eq 0 ]; then
    echo -e "${GREEN}✅ 编译成功！${NC}"
    echo -e "${GREEN}📁 可执行文件位置: $(pwd)/bin/ipu_protonet_classifier${NC}"
    
    # 检查可执行文件
    if [ -f "bin/ipu_protonet_classifier" ]; then
        echo -e "${GREEN}🎯 可执行文件生成成功${NC}"
        file bin/ipu_protonet_classifier
        ls -lh bin/ipu_protonet_classifier
    else
        echo -e "${YELLOW}⚠️  可执行文件未在预期位置找到${NC}"
        find . -name "ipu_protonet_classifier" -type f
    fi
else
    echo -e "${RED}❌ 编译失败${NC}"
    exit 1
fi

echo -e "${BLUE}🎉 构建完成！${NC}"